!-------------------------------------------------------------LICENSE--------------------------------------------------------------!
!                                                                                                                                  !
!The MAP code is written in Fortran language for magnetohydrodynamics (MHD) calculation with the adaptive mesh refinement (AMR)    !
!and Message Passing Interface (MPI) parallelization.                                                                              !
!                                                                                                                                  !
!Copyright (C) 2012                                                                                                                !
!Ronglin Jiang                                                                                                                     !
!rljiang@ssc.net.cn                                                                                                                !
!585 Guoshoujing Road. Pudong, Shanghai, P.R.C. 201203                                                                             !
!                                                                                                                                  !
!This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License         !
!as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.             !
!                                                                                                                                  !
!This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of    !
!MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.                        !
!                                                                                                                                  !
!You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software     !
!Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.                                                   !
!                                                                                                                                  !
!-------------------------------------------------------------LICENSE--------------------------------------------------------------!

!==================================================================================================================================|
subroutine variables_transform (vx, vy, vz, pr, te, ro, mx, my, mz, bx, by, bz, en, nx, ny, nz, dir)
!==================================================================================================================================|

   use parameters
   implicit none

   integer(4), intent(in) :: nx, ny, nz, dir

   real(8), dimension(nx, ny, nz), intent(inout) :: ro, mx, my, mz, bx, by, bz, en
   real(8), dimension(nx, ny, nz), intent(inout) :: vx, vy, vz, pr, te

!----------------------------------------------------------------------------------------------------------------------------------|
   if (dir .eq. 1) then
      do k = 1, nz
      do j = 1, ny
      do i = 1, nx
         vx(i, j, k) = mx(i, j, k) / ro(i, j, k)
         vy(i, j, k) = my(i, j, k) / ro(i, j, k)
         vz(i, j, k) = mz(i, j, k) / ro(i, j, k)
         pr(i, j, k) = (en(i, j, k) -                                                                                              &
            (mx(i, j, k) * mx(i, j, k) + my(i, j, k) * my(i, j, k) + mz(i, j, k) * mz(i, j, k)) / ro(i, j, k) / 2.0d0 -            &
            (bx(i, j, k) * bx(i, j, k) + by(i, j, k) * by(i, j, k) + bz(i, j, k) * bz(i, j, k)) / 2.0d0) * gmm1
         te(i, j, k) = pr(i, j, k) / ro(i, j, k)
      enddo
      enddo
      enddo
   else
      do k = 1, nz
      do j = 1, ny
      do i = 1, nx
         pr(i, j, k) = te(i, j, k) * ro(i, j, k)
         mx(i, j, k) = vx(i, j, k) * ro(i, j, k)
         my(i, j, k) = vy(i, j, k) * ro(i, j, k)
         mz(i, j, k) = vz(i, j, k) * ro(i, j, k)
         en(i, j, k) = pr(i, j, k) / gmm1 +                                                                                        &
            (mx(i, j, k) * mx(i, j, k) + my(i, j, k) * my(i, j, k) + mz(i, j, k) * mz(i, j, k)) / ro(i, j, k) / 2.0d0 +            &
            (bx(i, j, k) * bx(i, j, k) + by(i, j, k) * by(i, j, k) + bz(i, j, k) * bz(i, j, k)) / 2.0d0
      enddo
      enddo
      enddo
   endif

!----------------------------------------------------------------------------------------------------------------------------------|
   return
end subroutine variables_transform
